﻿Imports Commander_Wars.Spieletools
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class ObjektKOAnzeige
    Dim ZweiKOS As Boolean = False
    Dim Gabeleisten() As ObjektGabeleiste
    Dim Spieler As ObjektSpieler
    Dim Hintergrundtextur As Texture
    Shared Geld As Texture
    Dim Rechteck As Rectangle
    Public GespiegeltGemalt As Boolean = False
    Public Sub New(ByVal neuSpieler As ObjektSpieler, ByVal P As Point)
        Laden(neuSpieler, P)
        If Geld Is Nothing Then
            Geld = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Geld.png")
        End If
    End Sub
    Public Sub Laden(ByVal neuSpieler As ObjektSpieler, ByVal P As Point)
        Spieler = neuSpieler
        If IsNothing(Spieler.KOS(1)) = False Then
            Array.Resize(Gabeleisten, 2)
            Gabeleisten(0) = New ObjektGabeleiste(Spieler.KOS(0), New Point(P.X + 34, P.Y + 3))
            Gabeleisten(1) = New ObjektGabeleiste(Spieler.KOS(1), New Point(P.X + 34, P.Y + 24))
            Hintergrundtextur = Grafikengine.LoadTexture(Image.FromFile(DataSettings.Resourcenpfad + "Objects\2KO Anzeige.png"), Hauptmenue.Farbtabelleerstellen(Spieler.Farbe))
            ZweiKOS = True
        Else
            Array.Resize(Gabeleisten, 1)
            Gabeleisten(0) = New ObjektGabeleiste(Spieler.KOS(0), New Point(P.X + 34, P.Y + 3))
            Hintergrundtextur = Grafikengine.LoadTexture(Image.FromFile(DataSettings.Resourcenpfad + "Objects\KO Anzeige.png"), Hauptmenue.Farbtabelleerstellen(Spieler.Farbe))
            ZweiKOS = False
        End If
        Rechteck = New Rectangle(P.X, P.Y, Rechteck.Width, Rechteck.Height)
        GespiegeltGemalt = False
    End Sub
    Public Sub KOAnzeigeerstellen(ByVal P As Point)
        If GespiegeltGemalt = True Then
            Spiegeln(P.X)
        End If
        Laden(Objektverwalter.Spielfeld.AktuellerSpieler, P)
    End Sub
    Public Sub Spiegeln(ByVal X As Integer)
        If GespiegeltGemalt = True Then
            GespiegeltGemalt = False
            Rechteck.X = X
        Else
            GespiegeltGemalt = True
            If ZweiKOS = True Then
                Rechteck.X = X - 79
            Else
                Rechteck.X = X - 72
            End If
        End If
        For I = 0 To Gabeleisten.Length - 1
            If IsNothing(Gabeleisten(I)) = False Then
                If GespiegeltGemalt = True Then
                    If ZweiKOS = True Then
                        Gabeleisten(I).Spiegeln(Rechteck.X + 39)
                    Else
                        Gabeleisten(I).Spiegeln(Rechteck.X + 32)
                    End If
                Else
                    Gabeleisten(I).Spiegeln(X + 34)
                End If
            End If
        Next
    End Sub
    Public Sub Malen()
        If Hintergrundtextur IsNot Nothing Then
            Dim sngRotation As Double = 0
            Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
            Grafikengine.ptfRotCenter = Nothing
            Grafikengine.szfScale = Nothing
            If GespiegeltGemalt = False Then
                If ZweiKOS = True Then
                    With Grafikengine.recBild
                        .X = 0 : .Width = 79
                        .Y = 0 : .Height = 30
                    End With
                    Grafikengine.ptfPosition = New Drawing.Point(Rechteck.X, Rechteck.Y)
                    Grafikengine.Sprite.Draw2D(Hintergrundtextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    'Draw CO Faces
                    Objektverwalter.GetKO(Spieler.KOS(0).Bild).MiniGesichtMalen(Rechteck.X, Rechteck.Y, GespiegeltGemalt)
                    Objektverwalter.GetKO(Spieler.KOS(1).Bild).MiniGesichtMalen(Rechteck.X, Rechteck.Y + 21, GespiegeltGemalt)
                Else
                    With Grafikengine.recBild
                        .X = 0 : .Width = 72
                        .Y = 0 : .Height = 15
                    End With
                    Grafikengine.ptfPosition = New Drawing.Point(Rechteck.X, Rechteck.Y)
                    Grafikengine.Sprite.Draw2D(Hintergrundtextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    'Draw CO Face
                    Objektverwalter.GetKO(Spieler.KOS(0).Bild).MiniGesichtMalen(Rechteck.X, Rechteck.Y, GespiegeltGemalt)
                End If
            Else
                If ZweiKOS = True Then
                    With Grafikengine.recBild
                        .X = 79 : .Width = 79
                        .Y = 0 : .Height = 30
                    End With
                    Grafikengine.ptfPosition = New Drawing.Point(Rechteck.X, Rechteck.Y)
                    Grafikengine.Sprite.Draw2D(Hintergrundtextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    With Grafikengine.recBild
                        .X = 144 : .Width = 32
                        .Y = 362 : .Height = 12
                    End With
                    'Draw CO Faces
                    Objektverwalter.GetKO(Spieler.KOS(0).Bild).MiniGesichtMalen(Rechteck.X + 47, Rechteck.Y, GespiegeltGemalt)
                    Objektverwalter.GetKO(Spieler.KOS(1).Bild).MiniGesichtMalen(Rechteck.X + 47, Rechteck.Y + 21, GespiegeltGemalt)
                Else
                    With Grafikengine.recBild
                        .X = 72 : .Width = 72
                        .Y = 0 : .Height = 15
                    End With
                    Grafikengine.ptfPosition = New Drawing.Point(Rechteck.X, Rechteck.Y)
                    Grafikengine.Sprite.Draw2D(Hintergrundtextur, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    'Draw CO Face
                    Objektverwalter.GetKO(Spieler.KOS(0).Bild).MiniGesichtMalen(Rechteck.X + 40, Rechteck.Y, GespiegeltGemalt)
                End If
            End If
            'Jetzt malen wir die Geldanzeige
            If Spieler.VeraenderteWerte.KeineFondsInfos = True Then
                FragezeichenMalen()
            ElseIf Spieler.Team <> Objektverwalter.Spielfeld.AktuellerSpieler.Team And Spieler.KOS(0).KeineFondsInfos = True Then
                FragezeichenMalen()
            Else
                If Objektverwalter.Spielfeld.Regeln.Nebel > 0 Then
                    If Spieler.KIStufe = ObjektSpieler.KIStufen.Mensch And Spieler.Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                        GeldMalen()
                    ElseIf Spieler.Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                        GeldMalen()
                    Else
                        FragezeichenMalen()
                    End If
                Else
                    GeldMalen()
                End If
            End If
            For I = 0 To Gabeleisten.Length - 1
                If IsNothing(Gabeleisten(I)) = False Then
                    If I = 1 And Spieler.KOS(0).Gabemodus = ObjektKO.Gabemodi.Doppelgabe Then
                    Else
                        Gabeleisten(I).Malen()
                    End If
                End If
            Next
        End If
    End Sub
    Private Sub GeldMalen()
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Dim StartX As Integer = Rechteck.X
        Dim Fonds() As Char = Spieler.Fonds.ToString.ToCharArray
        If GespiegeltGemalt = True Then
            If ZweiKOS = True Then
                StartX = Rechteck.X + 79
            Else
                StartX = Rechteck.X + 72
            End If
            StartX = StartX - 20 - Fonds.Length * 6 - 4
        End If
        'Wir zeigen das Geld auf jedenfall an
        With Grafikengine.recBild
            .X = 0 : .Width = 10
            .Y = 0 : .Height = 12
        End With
        Grafikengine.ptfPosition = New Point(StartX, Rechteck.Y + 9)
        Grafikengine.Sprite.Draw2D(Geld, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

        Grafikengine.ptfPosition.X += 20
        For I = 0 To Fonds.Length - 1
            With Grafikengine.recBild
                .X = 10 + 6 * Val(Fonds(I)) : .Width = 6
                .Y = 0 : .Height = 12
            End With
            Grafikengine.Sprite.Draw2D(Geld, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            Grafikengine.ptfPosition.X += 6
        Next
    End Sub
    Private Sub FragezeichenMalen()
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Dim StartX As Integer = Rechteck.X
        If GespiegeltGemalt = True Then
            If ZweiKOS = True Then
                StartX = Rechteck.X + 79
            Else
                StartX = Rechteck.X + 72
            End If
            StartX = StartX - 10 - 10
        End If
        With Grafikengine.recBild
            .X = 0 : .Width = 10
            .Y = 0 : .Height = 12
        End With
        Grafikengine.ptfPosition = New Point(StartX, Rechteck.Y + 9)
        Grafikengine.Sprite.Draw2D(Geld, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        With Grafikengine.recBild
            .X = 70 : .Width = 10
            .Y = 0 : .Height = 12
        End With
        Grafikengine.ptfPosition.X += 14
        Grafikengine.Sprite.Draw2D(Geld, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
    End Sub
    Public Sub ChangeYOrt(ByVal NeuY As Integer)
        Rechteck.Y = NeuY
        If IsNothing(Spieler.KOS(1)) = False Then
            Array.Resize(Gabeleisten, 2)
            Gabeleisten(0) = New ObjektGabeleiste(Spieler.KOS(0), New Point(Rechteck.X + 34, Rechteck.Y + 3))
            Gabeleisten(1) = New ObjektGabeleiste(Spieler.KOS(1), New Point(Rechteck.X + 34, Rechteck.Y + 24))
        Else
            Array.Resize(Gabeleisten, 1)
            Gabeleisten(0) = New ObjektGabeleiste(Spieler.KOS(0), New Point(Rechteck.X + 34, Rechteck.Y + 3))
            Hintergrundtextur = Grafikengine.LoadTexture(Image.FromFile(DataSettings.Resourcenpfad + "Objects\KO Anzeige.png"), Hauptmenue.Farbtabelleerstellen(Spieler.Farbe))
        End If
        If GespiegeltGemalt = True Then
            For Each Leiste In Gabeleisten
                Leiste.Spiegeln(DataSettings.BildschirmBreite - 34)
            Next
        End If
    End Sub
    Public Sub Reset()
        If Hintergrundtextur IsNot Nothing Then
            Hintergrundtextur.Dispose()
            Hintergrundtextur = Nothing
        End If
        Grafikengine.Grafikkarte.EvictManagedResources()
    End Sub
End Class

Public Class ObjektKOAnzeigen
    Dim KOAnzeigen As ObjektKOAnzeige() = {}
    Public GespiegeltGemalt As Boolean = False
    Const EinKOPlatz As Integer = 22
    Const ZweiKOPlatz As Integer = 35
    Dim Start As Boolean = False
    Public Sub New()
        Dim p As New Point(Hauptmenue.Rechteck.X, Hauptmenue.Rechteck.Y)
        Array.Resize(KOAnzeigen, Objektverwalter.Spielfeld.Spieler.Length - 1)
        For I = 1 To Objektverwalter.Spielfeld.Spieler.Length - 1
            KOAnzeigen(I - 1) = New ObjektKOAnzeige(Objektverwalter.Spielfeld.Spieler(I), p)
            If Objektverwalter.Spielfeld.Spieler(I).KOS(1) Is Nothing Then
                p.Y += EinKOPlatz
            Else
                p.Y += ZweiKOPlatz
            End If
        Next
        Start = True
    End Sub
    Public Sub Spiegeln(ByVal X As Integer)
        If Start = True Then
            For Each KOAnzeige In KOAnzeigen
                KOAnzeige.Spiegeln(X)
            Next
            If GespiegeltGemalt = True Then
                GespiegeltGemalt = False
            Else
                GespiegeltGemalt = True
            End If
        End If
    End Sub

    Public Sub Malen()
        'Wir malen das aktuelle Team immer als erstes.
        Dim Start As Integer = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler - 1
        For I = Start To KOAnzeigen.Length - 1
            If I >= 0 Then
                KOAnzeigen(I).Malen()
            End If
        Next
        For I = 0 To Start - 1
            If I >= 0 Then
                KOAnzeigen(I).Malen()
            End If
        Next
    End Sub
    Public Sub KOAnzeigeerstellen()
        Dim Start As Integer = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler - 1
        Dim Y As Integer = Hauptmenue.Rechteck.Y
        For I = Start To KOAnzeigen.Length - 1
            If I >= 0 Then
                KOAnzeigen(I).ChangeYOrt(Y)
                If Objektverwalter.Spielfeld.Spieler(I + 1).KOS(1) Is Nothing Then
                    Y += EinKOPlatz
                Else
                    Y += ZweiKOPlatz
                End If
            End If
        Next
        For I = 0 To Start - 1
            If I >= 0 Then
                KOAnzeigen(I).ChangeYOrt(Y)
                If Objektverwalter.Spielfeld.Spieler(I + 1).KOS(1) Is Nothing Then
                    Y += EinKOPlatz
                Else
                    Y += ZweiKOPlatz
                End If
            End If
        Next
    End Sub
    Public Sub Reset()
        For Each K In KOAnzeigen
            K.Reset()
        Next
    End Sub
End Class
